Terraform CloudでAWSリソースをデプロイしてみる
「Terraform Cloudの雰囲気を掴みたい」
Terraform CloudはStateファイルの管理やTerraformのCI/CDを楽にできる便利なツールです。
この記事では、そんなTerraform Cloudの雰囲気を掴む助けになると幸いです。
やってみた
Terraform Cloudのアカウント作成
以下サイトで、Terraform Cloudのアカウントを作成します。
https://app.terraform.io/signup/account
本記事の内容は、5名まで無料のFreeプランで実行可能です。
サンプルコード
以下のコードが入っているGithubリポジトリとワークスペースを紐付けます。
任意の名前でGithubリポジトリを作成して、以下のコードをpushします。
この後の手順で、Terraform Cloudのワークスペースと作成したリポジトリを紐づけます。
AWSのus-east-1リージョンにVPCを作成するという内容です。
terraform { required_providers { aws = { source = "hashicorp/aws" version = "~> 4.0" } } cloud { organization = "<オーガニゼーション名>" hostname = "app.terraform.io" workspaces { name = "state-sample-remote" } } } # Configure the AWS Provider provider "aws" { region = "us-east-1" } # Create a VPC resource "aws_vpc" "example" { cidr_block = "10.0.0.0/16" }
注目してもらいたいのは、cloudブロックの部分です。
The cloud block only affects Terraform CLI's behavior. When Terraform Cloud uses a configuration that contains a cloud block - for example, when a workspace is configured to use a VCS provider directly - it ignores the block and behaves according to its own workspace settings.
クラウド ブロックは、Terraform CLI の動作にのみ影響します。 Terraform Cloud がクラウド ブロックを含む構成を使用する場合 (たとえば、ワークスペースが VCS プロバイダーを直接使用するように構成されている場合)、ブロックを無視し、独自のワークスペース設定に従って動作します。
引用元: Terraform Cloud Settings - Terraform CLI | Terraform by HashiCorp
この部分は、ローカルでTerraform CLIを使用する場合に影響します。 Terraform Cloud上でapplyやplan(remote実行)を行うために必須の項目ではありません。
実際にこの部分を記載せずに、Terraform Cloud上で実行してみましたが正常にRunを行えました。
個人的にはTerraform CLIを使用しない場合でも、記載しておいた方が良いと思います 理由としては、他の人がコードを見たときにTerraform Cloudを使用していることがわかるためです。
ワークスペースの作成
Terraform Cloud側の作業です。
ワークスペースを作成します。
AWS認証情報の設定
ワークスペースを作成したら、変数を設定します。 AWS上にリソースをデプロイするために、IAMユーザーのアクセスキーとシークレットアクセスキーが必要です。
今回は個人検証用のOrganizationを使っているため、Organization全体で使用できるように設定しています。 ワークスペース個別に設定したり、Organizationで設定して特定のワークスペースで利用できるようにもできます。
Create a Credentials Variable Set | Terraform - HashiCorp Learn
ちなみに、Terraform CloudがAWSリソースにアクセスするために、IAMロールを使用することも可能です。(2023/1/31のアップデート)
補足
Terraform Cloud上でplan,applyを実行しない場合は(実行モード local、Stateファイルの管理等のみを行う)、AWS認証情報の設定をTerraform Cloud上に保存する作業は不要です。
本記事の内容はTerraform Cloud上でplan,applyを実行する実行モード remoteを使用しています。
Terraformの実行
「サイドバーのRuns」 > 「Actions」 > 「Start new Run」で手動実行できます。
リポジトリへのpushやPull Requestをトリガーに実行することもできます。
デフォルトでは、Planまで実行されて「Confirm & Apply」のボタンを押すことでApplyを実行することができます。 (承認不要で自動Applyする設定も可能です)
Stateファイル
「States」からStateファイルを確認できます。
(補足)ローカルでTerraform CLIを実行したい場合
Terraform Cloud APIトークンの作成
ローカルからTerraform Cloudを使用するために、APIトークンを作成します。
以下コマンドでトークンが作成されます。
terraform login # プロンプトに従って必要事項入力
トークンはローカルの「~/.terraform.d/credentials.tfrc.json」に保存されます。
$ cat ~/.terraform.d/credentials.tfrc.json { "credentials": { "app.terraform.io": { "token": "<トークン>" } } }
Log in to Terraform Cloud from the CLI | Terraform - HashiCorp Learn
トークンが作成できたら、通常通りTerraform CLIを実行できます。
terraform init terraform plan terraform apply
おわりに
Terraform CloudでAWSリソースをデプロイする方法でした。
興味が湧いた方は、公式のチュートリアルをやってみると面白いと思います。
今回の記事では基本的な機能を紹介しましたが、より実践的な内容を見てみたい方は以下の記事がおすすめです。
他にもTerraform Cloudの便利な機能をブログで紹介しています。良かったら、読んでもらえると嬉しいです。
Terraform Cloud の記事一覧 | DevelopersIO
以上、AWS事業本部の佐藤(@chari7311)でした。